package com.simple.orm.agreement.process;

import java.io.Closeable;
import java.io.IOException;

/**
 * 此接口的实现类，应该将目标对象，转换成字节数组
 */
public interface WriteProcess<T> extends Closeable {

    /**
     * 将目标对象，转换成字节数组
     *
     * @param t 被转换的目标对象
     * @return 可被互联网传输的字节数组
     */
    byte[] writeTo(T t) throws IOException;

    /**
     * 获取已注册的描述事件处理器，默认为null
     *
     * @return 描述事件处理器
     */
    DescribeEvent getDescribeEvent();

    /**
     * 注册描述事件处理器
     *
     * @param describeEvent 描述事件处理器
     */
    void setDescribeEvent(DescribeEvent describeEvent);

    /**
     * 描述事件处理器
     */
    interface DescribeEvent {

        /**
         * 如果使用了注解com.simple.orm.agreement.annotation.Describe注解，则重写并且注册此对象，即可获取到描述事件
         *
         * @param describe 协议的名称
         */
        void event(String describe);
    }
}
